#include <stdlib.h>
#include <stdio.h>
#include <string.h>


/*COLOCA OS DADOS DO ARQUIVO DE CONFIGURACAO NUMA MATRIZ*/
int** matriz(char* file_name)
{
  int **mat;
  char tam[4],tamaux[2];
  char *pri;
  char *sec;  
  int i,j,a=0,b=0,c=0,x=0;
  long file_size;
  
  FILE *apt = fopen(file_name,"r");
  
  //coloca o cursor no final do arquivo
  fseek(apt, 0, SEEK_END);

	//le o numero de bytes ate o final do arquivo	
  file_size = ftell(apt)+1;

  //coloca o cursor no comeco do arquivo
	fseek (apt, 0, SEEK_SET);

  //vetor com tamanho total de bytes do arquivo de config  
  pri = (char*)malloc(sizeof(char)*(file_size));

  //pega o numero de linhas e colunas do arquivo de config
  fgets(tam,4,apt);
  tam[4]='\0';
  
  // pega o numero de colunas dado no arquivo de config
  tamaux[0]=tam[2];
  tamaux[1]='\0';

  //transforma o char numero de linhas para inteiro
  i = atoi(tam);
  
  //transforma o char numero de colunas para inteiro
  j = atoi(tamaux);

  //malloc na matriz de inteiros
  mat = (int**)malloc(sizeof(int)*i);
  for(a=0;a<=i;a++)
  {
    mat[a] = (int*) malloc(sizeof(int)*j);
  }
  fseek(apt,2,SEEK_CUR);

  //insere na matriz de config
  for(a=0;a<i;a++)
  {
    //pega o valor no arkivo ateh achar o \n
    fgets(pri,file_size,apt);
    //encontra o lugar exato do \n e troca por \0
    while(pri[c]!='\n')
    {
      c++;
    }
    pri[c]='\0';
    c=0;
    
    //faz o primeiro strtok
    sec = strtok(pri," "); 
    
    //insere as linhas
    for(b=0;b<j;b++)
    {
      //transforma em inteiro o strtok
      x = atoi(sec);
      
      //insere na matriz
      mat[a][b] = x;
      
      //pega os proxs strtok
      sec = strtok(NULL," ");  
    }
  }

  /*imprime a matriz de config 
  for(a=0;a<i;a++)
  {
    for(b=0;b<j;b++)
    {
      printf("%d ",mat[a][b]);
    }
    printf("\n");
  }
 */
  free(pri);
  
  fclose(apt);
  return mat;
}

void Lista_variavel (char *file_name)
{
    FILE *ap_file;
    int **nome, size=0,size2=0,size3=0, i=0,b, a=1,j=0;
    char tam[3] , *vetor;//o vetor tam vai pegar o tamanho de cada campo, nenhum campo tera 3 digitos ou mais (tomara!),o tamanho dos campos devera sempre aparecer com 2 digitos
    
    nome = matriz("config.txt");
            
    ap_file = fopen(file_name, "r");
    
    //pegar linha do arquivo
    
    do
    {
       while (j<4)
       {
         fscanf (ap_file, "%c%c%c",&tam[0],&tam[1],&tam[2]); //le os caracteres de tamanho do arquivo de configuracao
	       size2 = (atoi(tam))/100; //ID do campo
	       size = (atoi(tam))%100; //agora temos o tamanho do campo na variavel "size"
	       vetor = (char*)malloc(sizeof(char)*size+1);
	       if(fgets(vetor,size+1,ap_file)==NULL)
           {
		        a =0;
		        free (vetor);
		        printf ("acabou a linha!\n");
		        break;
		        }
	     //fgets(vetor,size+1,ap_file);          
          printf ("ID=%d:%s ",nome[size2-1][i], vetor);
          i++;
          printf ("tamanho maximo:%d ",nome[size2-1][i]);
          i++;
          printf ("%tamanho atual:%d ",size);
          printf ("Obrigatoriedade:%d ",nome[size2-1][i]);
          i++;
          printf ("tipo de caractere:%d ",nome[size2-1][i]);
          printf ("\n");
          
          free (vetor);
	        j++;
      }  
      i=0;
    } 
    while (a);
	  fclose(ap_file);
}

int main ()
{
Lista_variavel("data.txt");
system ("pause");
return 0;

}





